// /import editor.js
/**
 * @class baidu.editor.browser 判断浏览器
 */

baidu.editor.browser = function() {
	var agent = navigator.userAgent.toLowerCase(), opera = window.opera, browser = {
		/**
		 * 检测浏览器是否为IE
		 * 
		 * @name baidu.editor.browser.ie
		 * @property 检测浏览器是否为IE
		 * @grammar baidu.editor.browser.ie
		 * @return {Boolean} 返回是否为ie浏览器
		 */
		ie : !!window.ActiveXObject,

		/**
		 * 检测浏览器是否为Opera
		 * 
		 * @name baidu.editor.browser.opera
		 * @property 检测浏览器是否为Opera
		 * @grammar baidu.editor.browser.opera
		 * @return {Boolean} 返回是否为opera浏览器
		 */
		opera : (!!opera && opera.version),

		/**
		 * 检测浏览器是否为WebKit内核
		 * 
		 * @name baidu.editor.browser.webkit
		 * @property 检测浏览器是否为WebKit内核
		 * @grammar baidu.editor.browser.webkit
		 * @return {Boolean} 返回是否为WebKit内核
		 */
		webkit : (agent.indexOf(' applewebkit/') > -1),

		/**
		 * 检测是否为Adobe AIR
		 * 
		 * @name baidu.editor.browser.air
		 * @property 检测是否为Adobe AIR
		 * @grammar baidu.editor.browser.air
		 * @return {Boolean} 返回是否为Adobe AIR
		 */
		air : (agent.indexOf(' adobeair/') > -1),

		/**
		 * 检查是否为Macintosh系统
		 * 
		 * @name baidu.editor.browser.mac
		 * @property 检查是否为Macintosh系统
		 * @grammar baidu.editor.browser.mac
		 * @return {Boolean} 返回是否为Macintosh系统
		 */
		mac : (agent.indexOf('macintosh') > -1),

		/**
		 * 检查浏览器是否为quirks模式
		 * 
		 * @name baidu.editor.browser.quirks
		 * @property 检查浏览器是否为quirks模式
		 * @grammar baidu.editor.browser.quirks
		 * @return {Boolean} 返回是否为quirks模式
		 */
		quirks : (document.compatMode == 'BackCompat')
	};

	/**
	 * 检测浏览器是否为Gecko内核，如Firefox
	 * 
	 * @name baidu.editor.browser.gecko
	 * @property 检测浏览器是否为Gecko内核
	 * @grammar baidu.editor.browser.gecko
	 * @return {Boolean} 返回是否为Gecko内核
	 */
	browser.gecko = (navigator.product == 'Gecko' && !browser.webkit && !browser.opera);

	var version = 0;

	// Internet Explorer 6.0+
	if (browser.ie) {
		version = parseFloat(agent.match(/msie (\d+)/)[1]);

		/**
		 * 检测浏览器是否为 IE8 浏览器
		 * 
		 * @name baidu.editor.browser.IE8
		 * @property 检测浏览器是否为 IE8 浏览器
		 * @grammar baidu.editor.browser.IE8
		 * @return {Boolean} 返回是否为 IE8 浏览器
		 */
		browser.ie8 = !!document.documentMode;

		/**
		 * 检测浏览器是否为 IE8 模式
		 * 
		 * @name baidu.editor.browser.ie8Compat
		 * @property 检测浏览器是否为 IE8 模式
		 * @grammar baidu.editor.browser.ie8Compat
		 * @return {Boolean} 返回是否为 IE8 模式
		 */
		browser.ie8Compat = document.documentMode == 8;

		/**
		 * 检测浏览器是否运行在 兼容IE7模式
		 * 
		 * @name baidu.editor.browser.ie7Compat
		 * @property 检测浏览器是否为兼容IE7模式
		 * @grammar baidu.editor.browser.ie7Compat
		 * @return {Boolean} 返回是否为兼容IE7模式
		 */
		browser.ie7Compat = ((version == 7 && !document.documentMode) || document.documentMode == 7);

		/**
		 * 检测浏览器是否IE6模式或怪异模式
		 * 
		 * @name baidu.editor.browser.ie6Compat
		 * @property 检测浏览器是否IE6 模式或怪异模式
		 * @grammar baidu.editor.browser.ie6Compat
		 * @return {Boolean} 返回是否为IE6 模式或怪异模式
		 */
		browser.ie6Compat = (version < 7 || browser.quirks);

	}

	// Gecko.
	if (browser.gecko) {
		var geckoRelease = agent.match(/rv:([\d\.]+)/);
		if (geckoRelease) {
			geckoRelease = geckoRelease[1].split('.');
			version = geckoRelease[0] * 10000 + (geckoRelease[1] || 0) * 100
					+ (geckoRelease[2] || 0) * 1;
		}
	}
	/**
	 * 检测浏览器是否为chrome
	 * 
	 * @name baidu.editor.browser.chrome
	 * @property 检测浏览器是否为chrome
	 * @grammar baidu.editor.browser.chrome
	 * @return {Boolean} 返回是否为chrome浏览器
	 */
	if (/chrome\/(\d+\.\d)/i.test(agent)) {
		browser.chrome = +RegExp['\x241'];
	}
	/**
	 * 检测浏览器是否为safari
	 * 
	 * @name baidu.editor.browser.safari
	 * @property 检测浏览器是否为safari
	 * @grammar baidu.editor.browser.safari
	 * @return {Boolean} 返回是否为safari浏览器
	 */
	if (/(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(agent)
			&& !/chrome/i.test(agent)) {
		browser.safari = +(RegExp['\x241'] || RegExp['\x242']);
	}

	// Opera 9.50+
	if (browser.opera)
		version = parseFloat(opera.version());

	// WebKit 522+ (Safari 3+)
	if (browser.webkit)
		version = parseFloat(agent.match(/ applewebkit\/(\d+)/)[1]);

	/**
	 * 浏览器版本
	 * 
	 * gecko内核浏览器的版本会转换成这样(如 1.9.0.2 -> 10900).
	 * 
	 * webkit内核浏览器版本号使用其build号 (如 522).
	 * 
	 * @name baidu.editor.browser.version
	 * @grammar baidu.editor.browser.version
	 * @return {Boolean} 返回浏览器版本号
	 *         @example
	 *         if ( baidu.editor.browser.ie && <b>baidu.editor.browser.version</b> <= 6 )
	 *     alert( "Ouch!" );
	 */
	browser.version = version;

	/**
	 * 是否是兼容模式的浏览器
	 * 
	 * @name baidu.editor.browser.isCompatible
	 * @grammar baidu.editor.browser.isCompatible
	 * @return {Boolean} 返回是否是兼容模式的浏览器
	 *         @example
	 *         if ( baidu.editor.browser.isCompatible )
	 *     alert( "Your browser is pretty cool!" );
	 */
	browser.isCompatible = !browser.mobile
			&& ((browser.ie && version >= 6)
					|| (browser.gecko && version >= 10801)
					|| (browser.opera && version >= 9.5)
					|| (browser.air && version >= 1)
					|| (browser.webkit && version >= 522) || false);
	return browser;
}();
